1. Field of the Invention
This invention relates generally to responding to input/output requests made by computer applications, and more particularly to accelerating the performance of applications in relation to input/output requests received by an operating system from one or more applications.
2. Description of the Related Art
Computer applications continue to consume and rely upon an increasing amount of computational resources. Significant contributors to application performance include processor speed, memory, network bandwidth, and disk input and output (“I/O”, or “IO”). The decreasing cost of storage capacity has helped to ensure that enough storage remains available to applications. Unfortunately, improvements in disk IO performance (the rate at which a system reads data from and writes data to disk drives) have not kept pace with performance improvements in other computational resources, such as processor speed, memory size and speed, and network bandwidth, which improve by orders of magnitude every few years. As a result, many computer bottlenecks are now solely or largely due to inadequate disk IO performance. This, in part, is because mechanical operations are required for a disk drive to perform its tasks that slow performance to mechanical speeds, but these other computational resources operate at electronic speeds.
Various efforts have been made to ameliorate some of the latencies that result when IO requests involve physical storage. Storage caches in external storage subsystems, file system caches, and RAM disks are all well known. Each of these efforts may improve responsiveness at some point in the chain between an application making an IO request and the corresponding physical storage, but the IO performance bottleneck from the perspective of the application persists.
For example, certain storage subsystems external to the computer system employed technologies, each designed specifically for the proprietary subsystem on which it is used (thus, not transferable to commodity systems), that improved the responsiveness of IO requests to the proprietary subsystem's disks. But this improvement only begins after the IO request has “crossed the wire” connecting the computer system to the storage subsystem and it ends when the response from the subsystem to the request again reaches the wire on its way out of the subsystem. The latencies of transport of the request across the wire persist and it does nothing to improve IO performance on the other side of the wire, within the computer system.
RAM disks seek to improve disk IO performance by overcoming the latencies associated with mechanical disk drives. However, they too have problems that make them impractical or inadequate to solve the application IO bottleneck problem. With RAM disks, performance improvements come at a very high cost, making the solution cost prohibitive to most. They are difficult and laborious to implement, because the RAM disk relies upon user configuration or “tuning” of the system. Specifically, the user operates “hotfile” software to identify a list of most frequently accessed files to place on the RAM disk. The user must also manage which files will need to be moved to RAM disk, and the hardware connections to the RAM disk to ensure realization of the available performance improvements. Ongoing tuning is required to optimize RAM disk performance since the files that are currently “hot” may not be the same as those that are hot in the future. Finally, it is not efficient. It speeds IO by being a faster type of disk; it does not have the intelligence to know which applications are most susceptible to bottlenecks or how to improve IO performance based upon the requirements of such applications. Therefore, even though it increases IO speeds, it does so indiscriminately, and is not able to concentrate performance improvement on the IO requests that will have the most impact on the performance of the application.
Finally, the file system cache is useful, but has significant limitations, particularly for storage intensive operations, as the file system cache operates in a different context (files) from that used by the physical disks. Moreover, the file system cache is essentially passive, seeking to store as many files as allocation accommodates, and, like the RAM disk, does not lend itself to efficiency because it is not cognizant of or able to adjust to the specific IO requirements of individual applications.
Accordingly, while there have been various advances in the provision of faster responsiveness to application IO requests, there are many remaining problems and the disk IO performance bottleneck persists.